pyenv- 环境管理
pyenv- 环境管理
Pyenv 是一个简单的 python 版本管理工具。它允许您轻松地在多个版本的 Python 之间切换。它简单,不引人注目,并且遵循 UNIX 的传统,即只做一件事的单一用途工具。
以后想体验最新版本的 Python,通过 pyenv 来下载和管理即可。
Linux 环境下
Github:GitHub - pyenv/pyenv: Simple Python version management
无法在 Windos 平台使用,但是好在我们还有
pyenv-win
目前用不上,以后用的上了再来学习。也很简单,TODO
Windows 环境下
参考安装教程:Python的pyenv-win工具安装与使用 - 文章详情 - 李庆松的博客
官方安装教程:installation.md
工具很简单,安装很简单,使用也很简单,
安装
直接通过 pip
安装
pip install pyenv-win --target D:/pyenv-win/.pyenv
然后安装环境变量,官方文档里是直接设置在用户的环境变量里,我为了方便起见,设置到系统的环境变量里,注意,此时需要以管理员的身份运行 Windows Terminal
,否则提示没有权限。
官方文档:add-system-settings
在 Powersehll 中设置环境变量,请看《PowerShellTips.md》
[System.Environment]::SetEnvironmentVariable('PYENV', "D:\pyenv-win\.pyenv\pyenv-win\","Machine")
[System.Environment]::SetEnvironmentVariable('PYENV_ROOT', "D:\pyenv-win\.pyenv\pyenv-win\","Machine")
[System.Environment]::SetEnvironmentVariable('PYENV_HOME', "D:\pyenv-win\.pyenv\pyenv-win\","Machine")
[System.Environment]::SetEnvironmentVariable('path', "D:\pyenv-win\.pyenv\pyenv-win\bin;" + "D:\pyenv-win\.pyenv\pyenv-win\shims;" + [System.Environment]::GetEnvironmentVariable('path', "Machine"),"Machine")
Github 的 README 和官网都首推用 PowerShell 来安装:
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"
这里不推荐,因为这个脚本的内容是默认安装位置到
C:\Users\wwwli\.pyenv\.version
,也就是 C 盘,而且不能进行配置。其实看这个脚本,基本上可以看清楚安装的过程就是下载安装包,然后解压,然后设置相应的环境变量,然后我们 shell 中在输入 pyenv 的时候可以找到解压路径下的命令,其实大部分的软件安装都是这个步骤,卸载的步骤也是差不多的,删除相关的环境变量,删除安装包即可。
跟我们通过
pip
安装是一样的
重新打开一个 shell,输入 pyenv --version
能正常显示版本信息即安装成功。
注意:
一般我们在安装 pyenv 之前就已经安装了 Python,不然你也没法用 pip 下载,pyenv 不会自动识别这个 Python 版本,因为 pyenv 只会管理通过 pyenv 下载的版本。这样也好。
使用
pyenv install -l
查看 pyenv-win
支持的 Python 版本,然后通过 pyenv install <version>
下载指定的版本,下载下来的包会放到 \.pyenv\pyenv-win\install_cache
下面,然后安装到 .pyenv\pyenv-win\versions
目录中。
教程 Python的pyenv-win工具安装与使用 - 文章详情 - 李庆松的博客 里说官方镜像下载很慢,需要更换为淘宝的镜像,但是实际上我下载的时候挺快的,更换为淘宝镜像之后反而很慢,可能跟我本地使用了代理有关。
更换镜像的方法为:
修改
pyenv-win\libexec\libs
目录下(特别提示,对早期 pyenv-win 是在pyenv-win\libexec
目录下)的pyenv-install-lib.vbs
文件中 mirror="https://www.python.org/ftp/python" 引号内的改为https://npm.taobao.org/mirrors/python/
在下载多个版本之后,可通过 pyenv versions
检查所有下载的版本,然后可在其中选择一个版本,通过 pyenv global <version>
将其设置为全局版本,通过在指定目录下执行 pyenv version
或者 python --version
即可检查在当前目录下使用的 Python 版本,通过在命令行中执行 python -c "import sys; print(sys.executable)"
来查看当前目录下使用的 python 的具体安装地址。一般都为 \.pyenv\pyenv-win\versions\
目录下安装的版本。
如果是第一次安装设置,设置后输入
python --version
查看版本,如果不是自己设置的版本,就查看下在系统环境变量 Path 中是否设置死了 python 的路径,删除即可,然后重新 cmd 打开对话框,查看版本环境变量设置: 我的电脑 ->右键 ->选择属性 -> 高级系统设置 ->环境变量,主要是查看 Path 变量,不管是系统级别的还是用户级别的都可以看下。
如果你想在某个目录下使用跟全局版本不一样的版本,比如在某个项目的文件夹下,此时你可以在这个目录下执行 pyenv global <another-version>
,为这个目录设置一个本地版本。
如果你切换了 Python 版本,最好执行以下 pyenv rehash
。
在使用 pip 安装或卸载任何库或修改 .pyenv\pyenv-win\versions
文件夹中的文件之后(比如安装了新版本的 Python 或者切换 Python 版本),您必须运行 pyenv rehash
来为 python 和库的命令文件(executables)更新 pyenv。
PS:本来我电脑上就安装了 Python 3.10.4,安装 pyenv 之后,我又通过 pyenv 安装了 Python 3.10.4,两个软件相互不干扰,完美。
相关命令
-
commands:列出所有可用的 pyenv 命令
-
local:设置或显示当前目录下(特定于应用程序)的 Python 版本,带参数就是设置,不带参数就是查询。
当前目录及其所有子目录都会使用这个版本的 Python
此命令会在执行命令的目录下生成一个
.python-version
文件,其中记录的就是你通过 local 命令设置的特定的版本,如果删掉此文件,则设置的特定版本失效,回到全局 Python 版本本地版本跟虚拟环境的概念不一样,虚拟环境需要显式激活启用,本地版本只要设置了就一直用着
-
global:设置或显示全局 Python 版本,带参数就是设置,不带参数就是查询
-
shell:设置或显示特定于 shell 的 Python 版本,带参数就是设置,不带参数就是查询
-
install:安装 1 个或多个版本的 Python
-
uninstall:卸载 1 个或多个版本的 Python
-
update:更新缓存的版本数据库
-
rehash:重新对 pyenv shims 进行 hash 运算,(在切换 Python 版本后需要运行此命令)
记得在
pyevn
的安装目录之外运行此命令 -
vname:显示当前 Python 版本
-
version:显示当前 Python 版本及其所在目录
注意跟
--version
相区别,pyenv --version
输出的是pyenv
的版本信息 -
version-name:显示当前 Python 版本,跟 vname 命令差不多
-
versions:列出 pyenv 可用的所有 Python 版本,当前正在采用的版本前面会带一个
*
-
exec:以 PATH 环境变量中指定的 Python 路径执行命令,我们在前面清理过 PATH 环境变量,实际上就是以当前路径下生效的 Python 版本执行 Python 相关命令,比如
pyenv exec python --version
,效果等同于直接执行python --version
当我们想在终端中直接打开 Python 交互式命令行的时候,因为 PAth 环境变量中已经没有了
python.exe
的路径,所以需要这样配置启动命令(从 PowerShell 中启动):pwsh.exe -Command '& pyenv exec python'
。 -
which:显示命令文件的完整路径,比如
pyenv which pip
-
whence:列出包含给定命令的所有 Python 版本,比如
pyenv whence pip
更新
官方文档:update-pyenv
通过哪个 Python 下载的 pyenv-win
,就通过哪个 Python 更新。
首先到原始版本的 <python_home>\Lib\site-packages
目录下新建 easy_install.pth
文件,文件内容为在 安装
小节安装 pyevn-win
的时候指定的 --target
路径,即 pyevn-win
的安装路径,我本地,easy_install.pth
文件的路径就是 D:\Python\Python3.10.4\Lib\site-packages\easy_install.pth.pth
,pyevn-win
的安装路径是 D:/pyenv-win/.pyenv
然后即可开始更新,但是因为我们使用 pyenv 已经设置了全局版本,肯定是没法直接使用 pip
命令了,只能到原始版本的 Python 的 \Scripts
目录下直接执行 ./pip.exe
。比如查看所有依赖
cd D:\Python\Python3.10.4\Scripts
./pip.exe list | findstr pyenv-win
查看是否能查找到 pyenv,然后在此目录下执行
./pip.exe install --upgrade pyenv-win
卸载
卸载的步骤跟安装的过程是差不多的,删除相关的环境变量,通过 pip 删除 pyenv-win
包即可。删除的环境变量参考 安装
小节创建的环境变量,通过 pip 删除需要参考 更新
小节,到特定的目录下通过 ./pip.exe
执行 pip 命令。